// src/utils/apiClient.js
import User from "@/utils/User/User.js";
import axios from 'axios';
import { useRouter } from "vue-router";
import GlobeConfig from "@/const.js";

const router = useRouter()
// 创建 Axios 实例
const apiClient = axios.create({
    baseURL: GlobeConfig.baseUrl,
});

// 请求拦截器
apiClient.interceptors.request.use(
    config => {
        // 获取当前请求的路径
        const endpoint = config.url;

        // 定义不需要 Token 验证的白名单
        const noAuthEndpoints = [
            '/user-profile',
            '/travel-note/search',
            '/travel-note/firstimage',
            '/travel-note/image',
            '/travel-note/browse',
            '/travel-map',
            '/secondhanditem',
            '/market-item',
            '/comment'
        ];

        // 检查当前请求是否在白名单中
        if (noAuthEndpoints.some(path => endpoint.startsWith(path))) {
            const token = User.isLogin() ? localStorage.getItem('drive_platform_token') : null;
            config.headers['token'] = `${token}`;
            return config; // 不需要 Token 验证的接口直接放行
        }

        // 检查是否有 Token
        const token = User.isLogin() ? localStorage.getItem('drive_platform_token') : null;

        if (!token) {
            // 如果没有 Token，阻止请求并提示用户登录
            console.error('请登录后操作',config.url);
            return Promise.reject(new Error('请登录后操作'));
        }

        // 添加 Token 到请求头
        config.headers['token'] = `${token}`;
        return config;
    },
    error => {
        // 处理请求错误
        return Promise.reject(error);
    }
);

// 响应拦截器
apiClient.interceptors.response.use(
    response => {
        // 检查响应中是否包含新的token
        if (response.data && response.data.token) {
            // 存储新的token
            User.setToken(response.data.token);
        }
        return response;
    },
    error => {
        if (error.response) {

        }
        return Promise.reject(error);
    }
);

export default apiClient;
